package com.neo.repository;

import java.util.List;

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.neo.model.AbiCallInfo;
import com.neo.model.AlarmHeadCount;
import com.neo.model.AlarmHeadCountRecordEntity;
import com.neo.model.User;
import com.neo.model.group.PT;

/**
 * Created by summer on 2017/5/5.
 */
public interface UserRepository {

    void saveUser(List<AbiCallInfo> userList);

    User findUserByUserName(String userName);

    long updateUser(User user);

    void deleteUserById(Long id);

    void saveRecord(List<AlarmHeadCountRecordEntity> userList);

    void saveRecord1(List<AlarmHeadCount> userList);

    /**
     * @param pts
     * @Description:批量插入学生信息
     * @Return void
     * @Author liulonglong
     * @Date 2019/11/25 15:32
     **/
    void saveStudentInfo(List<PT> pts);

    /**
     * @param
     * @Description: 根据年级聚合
     * "统计各个年级人数"   这个比较简单，我们只需要按照年级分组然后进行sum就能得到结果
     * @Return com.mongodb.DBObject
     * @Author liulonglong
     * @Date 2019/11/25 15:39
     **/
    List<DBObject> groupByGrade(int pageNum, int pageSize);

    /**
     * @param start 开始
     * @param end   结束范围
     * @Description: "统计某个年级某一项测试在某个范围的人数"  这个也不难，只需要匹配 年级+测试项目+项目分数 between 分数1 and 分数2 然后根据年级分组统计
     * @Return com.mongodb.DBObject
     * @Author liulonglong
     * @Date 2019/11/25 15:42
     **/
    List<DBObject> groupByGradeAndGetCountBetweenRange(double start, double end, int pageNum, int pageSize);

    /**
     * @param start 开始
     * @param end   结束范围
     * @Description: "统计某个年级某一项测试在不在某个范围的人数"  这个也不难，只需要匹配 年级+测试项目+项目分数 between 分数1 and 分数2 然后根据年级分组统计
     * @Return com.mongodb.DBObject
     * @Author liulonglong
     * @Date 2019/11/25 15:42
     **/
    List<DBObject> groupByGradeAndGetCountNotBetweenRange(double start, double end, int pageNum, int pageSize);

    /**
     * @param pageNum
     * @param pageSize
     * @Description:统计各个测试项目得分的最大值，最小值，平均值” 这个问题其实就是针对测试项目进行分组，然后使用 min max avg函数
     * mongo ：
     * db.pt.aggregate(
     * [ { "$match" : { "grade_name" : "一年级"}} , { "$unwind" : "$items"} , { "$group" : { "_id" : "$items.item_name" , "平均分" : { "$avg" : "$items.score"} , "最小值" : { "$min" : "$items.score"} , "最大值" : { "$max" : "$items.score"}}}]
     * )
     * @Return java.util.List<com.mongodb.BasicDBObject>
     * @Author liulonglong
     * @Date 2019/11/26 10:16
     **/
    List<BasicDBObject> stat(int pageNum, int pageSize);

}
